SPI 通信协议:从零开始的逐步认知
你好!你已经了解了屏幕模块的基本知识,现在我们来深入理解 SPI 通信协议。我会按照四个问题的步骤,一步一步带你认识它。
整体的通信并控制屏幕显示的数据流向过程(单向)
ESP32-S3(你的代码)
↓ SPI总线(SCLK + MOSI)
ST7789V2(屏幕控制芯片)
↓ 内部GRAM(显存)
TFT液晶面板(你看到的画面)
1. 为什么要用 SPI?(背景)
问题的起点:单片机怎么"说话"给屏幕听?
你的 ESP32-S3 是一个"大脑",ST7789V2 是屏幕的"控制芯片"。它们是两个独立的芯片,要让屏幕显示内容,大脑必须把指令和数据"传递"给屏幕控制芯片。
这就需要一种通信协议——就像两个人说话要用同一种语言一样。
为什么不用其他方式?
常见的通信方式有很多,比如:
| 接口类型 | 数据线数量 | 速度 | 适合场景 |
|---|---|---|---|
| SPI | 1根(或多根)数据线 | 快 | 屏幕、Flash、传感器 |
| I2C | 1根数据线 | 中等 | 传感器、小屏幕 |
| I80(并行) | 8或16根数据线 | 更快 | 大屏幕 |
| RGB | 更多数据线 | 最快 | 高分辨率大屏 |
[LCD接口对比]
你的 240×320 TFT 屏幕用的是 SPI 接口,原因很简单:
- 引脚少:只需要 4~5 根线(SCLK、MOSI、CS、DC,加上可选的 MISO),节省 IO 资源。
- 速度够用:对于 240×320 这种分辨率的小屏幕,SPI 的速度完全够用。
- 硬件支持好:ESP32-S3 内置了 SPI 控制器(GP-SPI2、GP-SPI3),硬件直接支持,不需要软件模拟。

2. SPI 的技术原理是什么?
SPI 的全称
SPI = Serial Peripheral Interface(串行外设接口),是一种同步串行通信协议。
核心概念:主机与从机
- 主机(Master):发起通信的一方,就是你的 ESP32-S3。
- 从机(Slave):被动响应的一方,就是你的 ST7789V2 屏幕控制芯片。
四根核心信号线
SPI 通信靠这几根线完成:
| 引脚名 | 你的接线 | 作用 |
|---|---|---|
| SCLK(时钟) | GPIO 12 | ESP32-S3 发出节拍,每个节拍传一位数据 |
| MOSI(主出从入) | GPIO 11 | ESP32-S3 → 屏幕,发送数据 |
| CS(片选) | GPIO 10 | 拉低 = 选中屏幕,开始通信 |
| DC(数据/命令) | GPIO 14 | 高电平=数据,低电平=命令 |
| RST(复位) | GPIO 13 | 硬件复位屏幕 |
| BL(背光) | GPIO 9 | 控制背光亮灭 |
通信过程(用大白话解释)
想象你在餐厅点菜:
- CS 拉低 → 你举手叫服务员(选中屏幕,告诉它"我要跟你说话了")
- DC 拉低 → 你说"我要点菜"(告诉屏幕接下来是命令,比如"设置显示区域")
- SCLK 产生时钟 → 服务员开始计时,每个节拍你说一个字
- MOSI 传数据 → 你一位一位地说出命令内容
- DC 拉高 → 你说"菜的具体内容是..."(告诉屏幕接下来是数据,比如颜色值)
- CS 拉高 → 你说完了,服务员离开(结束本次通信)
这就是 SPI 的 4-line 模式(4线模式),也是你的屏幕使用的模式。
关键理解:DC 引脚是 SPI LCD 特有的!它区分"命令"和"数据"。没有它,屏幕不知道你发的是控制指令还是像素颜色。


3. 用了之后会有什么结果?
当你完成以上步骤后:
- BL(GPIO9)拉高 → 背光亮起,屏幕发光(但还没有内容)
- RST 复位 → ST7789V2 芯片重置到初始状态
- SPI 发送初始化命令 → 告诉屏幕:分辨率是 240×320,颜色格式是 RGB565,方向是竖屏...
- 发送像素数据 → 通过 MOSI 线,把每个像素的颜色值(16位 RGB565)一位一位传给屏幕
- 屏幕显示内容 → ST7789V2 把收到的颜色数据写入内部 GRAM(显存),屏幕就显示出对应颜色

总结:一句话理解 SPI
SPI 就是 ESP32-S3 用一根时钟线打节拍、一根数据线逐位传数据、一根CS线选中屏幕、一根DC线区分命令和数据,从而控制 ST7789V2 显示内容的通信方式。
它的优点是引脚少、速度快、硬件支持好,非常适合你这种 240×320 的小屏幕应用场景。[SPI LCD驱动流程]
